package com.sunni.aspect;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sunni.entity.Systemlog;
import com.sunni.mapper.SystemlogMapper;
import com.sunni.utils.RequestUtil;
import org.aspectj.lang.JoinPoint;
import org.springframework.beans.factory.annotation.Autowired;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;

/*课时110-aop内的方法*/
public class SystemAspect {

    /*课时113 - 往数据库写日志记录*/
    @Autowired
    private SystemlogMapper systemlogMapper;

    /*课时110-写入日志 测试方法*/
    /*课时111-往数据库里写*/
    public void writeLog(JoinPoint joinPoint) throws JsonProcessingException {
        System.out.println("写入日志");

        /*创建 日志类*/
        Systemlog systemlog = new Systemlog();

        /*写入 当前时间(操作时间)*/
        systemlog.setOptime(new Date());

        /*写入 操作的ip*/
        /*通过自己写的RequestUtil,从currentThread内，取出request*/
        HttpServletRequest request = RequestUtil.getRequest();
        if (request != null) {
            String IP = request.getRemoteAddr();
            systemlog.setIp(IP);
//            System.out.println("IP = " + IP);
        }

        /*课时113-写入方法、参数*/
        /*写入方法*/
        //方法全路径名
        String funcationFileName = joinPoint.getTarget().getClass().getName();
        // 方法名
        String funcationName = joinPoint.getSignature().getName();
        // 方法全路径+方法名
        String funcation = funcationFileName+":"+funcationName;
        systemlog.setFunction(funcation);

        /*写入参数(json格式)*/
        String params = new ObjectMapper().writeValueAsString(joinPoint.getArgs());
        systemlog.setParams(params);

        //执行写入
        systemlogMapper.insert(systemlog);
    }
}
